1
การประมวลผลแบบขนานบนดาวอังคาร
AI017Lesson 8
00:00

การประมวลผลแบบขนานบนดาวอังคารคือศิลปะในการจัดการงานที่เป็นอิสระหลายอย่าง เช่น การนำทางของยานสำรวจ การส่งข้อมูลชีวภาพ และการเชื่อมต่อสัญญาณดาวเทียม โดยไม่ให้ระบบหยุดชะงัก ในภาษา Go งานที่ทำงานอิสระ งานที่ทำงานอิสระ เรียกว่า goroutine

1. หลักการไม่แน่นอน

ควรสมมุติเสมอว่าการทำงานใน goroutine ต่างกันนั้น อาจทำงานในลำดับใดก็ได้เนื่องจากระบบปฏิบัติการของ Go จัดตารางงานไปยังคอร์ที่มีอยู่ จึงไม่สามารถพึ่งพาการสแกนของยานสำรวจหนึ่งตัวจะเสร็จก่อนที่อีกยานหนึ่งจะเริ่มส่งข้อมูลได้ หากไม่มีการประสานงานอย่างชัดเจน

go printGopher(c) // เปิดงานอิสระใหม่

2. กลไกการประสานงาน

เพื่อจัดการงานเหล่านี้ ภาษา Go ให้เครื่องมือหลักสองอย่าง:

  • การยกเลิกการเข้าถึงร่วมกัน: goroutine สามารถใช้ mutex เพื่อป้องกันไม่ให้แต่ละตัวทำอะไรบางอย่างพร้อมกัน
  • คำสั่ง select: ดูเหมือนคำสั่ง switch ที่แต่ละกรณีเก็บการรับหรือการส่งผ่านช่องสัญญาณ (channel) select รอจนกว่ากรณีหนึ่งจะพร้อมแล้วจึงดำเนินการ
ผู้จัดการกอรูติน(หมวกนิรภัยและกระดาษโน้ต)SELECTยานสำรวจอัลฟายานสำรวจเบต้า

3. โครงสร้างของงานที่ทำงานตลอดเวลา

งานที่ทำงานนานๆ มักจะใช้ลูปแบบไม่สิ้นสุดร่วมกับ select เพื่อตรวจสอบช่องสัญญาณการสื่อสารหลายช่องพร้อมกัน:

func worker() {
for {
select {
// รอช่องสัญญาณที่นี่
}
}
}
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>